/*
* x:数字1
* y:数字2
* 公约数：两个数都能整除的最大数字
*
* */
//版本1
function maxCommonDivisor(n1,n2){
    if((n1 - n2) > 0){ //先比较传入的两个数的大小
        [n1,n2] = [n2,n1] //当前一个数大于后一个数的时候，用结构赋值将两者的值进行对换
    }
    let commonDivisor = 0 //先定义一个最大公约数，默认值为0
    for(let i = 0; i <= n1; i++){
        if(n1 % i === 0 && n2 % i === 0){ //循环比对能够被整除的最大数
            commonDivisor = i
        }
    }
    return commonDivisor
}

//版本二：更损相减法
/*
* 状态1：给定的两个正整数，判断是否是偶数，是的话，用2约简
* 状态2：用大数减去小数，然后得出的差与小数进行比较，比较出大小后用大的减去小的，得出的差再与小数比较大小，比较完之后再用大数减去小数，直到得到的减数与差相等
* 约掉的2与等数的乘积就是公约数
*
* */
function maxCommonDivisor2(n1,n2){
    let count = 1 //先定义一个约除2的计数器
    while(n1 % 2 === 0 && n2 % 2 === 0){ //只要他们都是偶数就进行这个循环
        n1 = n1 / 2
        n2 = n2 / 2
        count*=2 //每当他们都约除了2，计数器就乘个2
    }
    if((n1 - n2) > 0){ //先比较传入的两个数的大小
        [n1,n2] = [n2,n1] //当前一个数大于后一个数的时候，用结构赋值将两者的值进行对换
    }

    let poor = n2 - n1 //求差值
    while(poor !== n1){
        if(poor < n1){
            [n2,n1] = [n1,poor]
        }else{
            [n2,n1] = [poor,n1]
        }
        poor = n2 - n1
    }
    return count*poor
}